草庐IT

C++ ifstream 到 char *

全部标签

c++ - 为什么将 `const char[N]` 和 `const char*` 传递给 view::c_str() 会产生不同的二进制文件,而 string_view 会产生相同的二进制文件?

使用std::string_view,range::for_each产生exact与constchar[N]和constchar*传递给std::string_viewctor也就是说这段代码autostr="thequickbrownfoxisjumpingonalazydog\nthequickbrownfoxisjumpingonalazydog\n";ranges::for_each(std::string_view{str},std::putchar);和auto&str="thequickbrownfoxisjumpingonalazydog\nthequickbrownf

c++ - ifstream::unget() 失败。 MS 的实现有问题还是我的代码有误?

昨天我在相当简单的代码中发现了一个奇怪的错误,该错误基本上是从ifstream获取文本并将其标记化。实际上失败的代码进行了多次get()/peek()调用以查找token“/*”。如果在流中找到token,则调用unget()以便下一个方法看到以token开头的流。有时,似乎只取决于文件的长度,unget()调用会失败。它在内部调用pbackfail()然后返回EOF。然而,在清除流状态后,我可以愉快地读取更多字符,所以它不完全是EOF..深入研究后,这里是可以轻松重现问题的完整代码:#include#include#include//generatesimpleststringpos

c++ - 如何将 `void(*fn)(const char *, ...)` 转换为 `std::function`,反之亦然

typedefvoid(*fn1)(constchar*,...);typedefstd::functionfn2;//hasinitializerbutincompletetype直觉上,这些对我来说实际上是一样的,但显然我的直觉让我失望了。我将如何协调这些数据类型?fn2为什么是不完整的类型?需要对fn2的签名进行哪些更改,以允许我为其分配fn1类型?创建要分配给fn2的lambda时,如何访问可变参数列表?换句话说,等价于以下的lambda是什么?voidfn1_compatible(constchar*format,...){va_listargs;va_start(args,

c++ - 模棱两可的调用(从 char* 到 lambda 与 std::string 的转换)

根据我的编译器gcc-4.6,下面示例中对func的调用是不明确的。voidfunc(conststd::string&str){}voidfunc(std::functionf){}voidtest(){func("Hello");}编译器这样说是否正确?如果我删除第一个重载,此代码将无法编译,因为它将无法实例化所涉及的模板。除了重命名这两个函数之一或显式转换为std::string之外,还有什么办法可以解决这个问题吗? 最佳答案 可由SFINAE在std::function的构造函数中解析。但是,它似乎不是必需的,也不是由GCC

c++ - 编译错误:ifstream::open 只接受引号 ""中的字符串值而不接受字符串变量

open函数是否对传入的字符串值类型有某种限制?ifstreamfile;stringfilename="output.txt";file.open(filename);我试图用一个字符串变量传递一个字符串值,但是当它试图编译时,结果是...agent.cpp:2:20:error:ofstream:Nosuchfileordirectoryagent.cpp:Infunction‘std::stringreadingline(std::string)’:agent.cpp:11:error:aggregate‘std::ifstreamfile’hasincompletetypean

C++如何将char作为数字而不是字符

我发现自己经常使用包含非常小范围数字(通常为1到10)的变量,并且希望通过使用char数据类型而不是int甚至short来最小化我使用的内存量。我想将cin值添加到我的char变量中,而无需cin将其转换为等效的ASCII,也无需使用单引号。即,以下内容:cout>selection;if(selection==1)return1;等...有通用的方法吗?同样,我不想使用单引号。谢谢 最佳答案 你可以创建一个小实用函数:structCharReader{char&c;CharReader(char&c):c(c){}};CharRe

c++ - 使对 unsigned char 线程安全(原子)的访问

我很清楚以前有人问过类似的问题而且我也知道,该操作很可能根本不是原子的,但我仍然出于好奇而问,希望有某种方法可以使其成为原子。情况:在struct中,有一个名为Busy的unsignedchar变量。(尽管它可以移出那里并独立站立)。此变量Busy由两个并发线程修改,一个在调度时设置位,另一个在完成预定操作后清除它们。现在,调度看起来像这样:while(SEC.Busy&(1虽然清除bitmaks看起来像这样:SEC.Busy&=~(1cData[2]);cData[2]基本上携带有关网络上使用了哪个插槽的信息,并通过另一个线程中的回调返回。现在的问题是:我如何确保SEC.Busy(这

C++ 错误 : no match for call to ‘(std::string {aka std::basic_string<char>}) (std::string&)’

我是C++新手。我搜索了很多次,但仍然得不到答案。我正在写一个名为Course的类(class)来描述学生在学校上的类(class)。Course类有3个字段:protected:stringcourseName;intcourseNum;floatscore;我有一个公共(public)方法“setName”来设置类(class)名称:Course&setName(stringname){this->courseName(name);return(*this);}但是,当我尝试编译时,编译器会提示:C++错误:对“(std::string{akastd::basic_string})

为 Ruby FFI 接口(interface)从字符串转换为 const char* 时的 C++ 字符编码

我正在使用一个外部C++库,它执行一些HTTPS通信并提供XML服务器响应。在服务器端,响应是通过ISO-8859-15编码的,我得到一个std::string表示来自API的响应。当我打印出来/将其写入文件时,它看起来是正确的。必须将std::string和int错误代码传递给我的外部调用方。所以我在结构中返回这两个值:extern"C"{structFoobarResponse{constchar*responseText;intreturnCode;};}不幸的是,我必须借助std::c_str()将std::string响应转换为constchar*C风格的字符串表示形式之前。

c++ - 类型 "char (&(...)) [2]"是什么意思?

我遇到了以下代码:字符(&f(...))[2];我检查了它的类型(使用typeid和c++filt)并得到:字符(&(...))[2]但我无法理解这种类型。[2]是让我失望的部分。没有它,我可以在函数定义中复制类型,例如:字符(&f(...))f与h中的类型相同(至少从typeid+c++filt的输出来看):字符&h(...) 最佳答案 它是一个函数声明,具有不同数量的参数并返回对两个元素的字符数组的引用。它可以通过使用typedef声明得更简单。例如typedefcharchar_array[2];char_array&f(..